package com.szrt.javaweb.ch01.dyn.aop;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 关注点：是重复的代码
 * 
 * 		1：大量分布在很多地方
 * 		2：与具体的业务是没有联系
 * 
 * 专门解决这样问题的类  抽象    切面
 * 
 * 
 * 把我们的切面跟我们的代理产生关系   ==>织入
 * @author zsrt
 * 
 * @Component   让ioc自动生成TransactionAspect的对象
 * 
 * @Aspect  自动调用 spring ProxyFactory 里面的方法
 *
 */


//@Component
//@Aspect
public class LogAspect {
	
	private static Logger logger= Logger.getLogger(LogAspect.class);  

	
	/**
	 * 定义我这些方法 通知  应用于那个类的那个方法  切面表达式
	 */
	//@Pointcut("execution(* com.szrt.javaweb.ch01.dyn.YmactorDaoImpl.act(..))")
	@Pointcut("execution(* com.szrt.javaweb.ch01.dyn.aop.YmactorDaoImpl.*(..))")
	public void  defineRange(){}
	
	
	
	//@Before(value="defineRange()")
	public void beginTransaction() throws Exception{
		
		
	}
	
	
	//@After(value="defineRange()")
	public void commit(){
		System.out.println("提交事物  由包吃包住 包飞机...");
	}
	
	
	@Around(value="defineRange()")
	public void round(ProceedingJoinPoint  pjp) throws Throwable{
		
		
		
		//回调
		
		Object proceed = pjp.proceed();
		
		String sql = (String) proceed;
		
		System.out.println(pjp.getTarget());
		
		
		
		logger.info("插入成功" + pjp.getTarget()  + pjp.getArgs()[0] +  pjp.getArgs()[1] );
		
		
		
		
	}
	
	
	
	

}
